package Persistencia;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class BaseDAO {

    // Atributo estatico, compartilhado por todos os objetos da classe BaseDAO
    // ou de suas filhas.
    private static Connection conexao = null;

    public BaseDAO() throws IOException {

        // Se a conexao ainda nao foi aberta, abre uma. O valor null no
        // atributo conexao significa que a conexao ainda nao foi aberta.
        // todos os objetos de persistencia vao compartilhar a mesma
        // conexao, pois este atributo eh estatico.
        if(conexao == null) {
            try {

                // Carrega o driver do PostgreSQL
                Class.forName("org.postgresql.Driver");

                // Conecta com o banco local. O primeiro String, para conexao com
                // o PostgreSQL, sera na forma "jdbc:postgresql:nomebd". O segundo e terceiro
                // strings especificam, respectivamente, usuario e senha para conexao.
                conexao = DriverManager.getConnection("jdbc:postgresql:postgres", "postgres", "jader");
            
            } catch(ClassNotFoundException e) { // Excecao levantada ao carregar o driver.
                throw new IOException("Driver PostgreSQL nao encontrado!");

            } catch(SQLException e) { // Excecao levantada ao conectar no banco.
                throw new IOException("Nao foi possivel conectar ao banco: " + e.getMessage());
            }
        }
    }

    public Connection getConexao() {
        return conexao;
    }

    public void finalize() {
        try {
            conexao.close();
        } catch(Exception e) {}
    }
}
